/**
 * 
 */
package cn.edu.hstc.bean.utils;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import cn.edu.hstc.app.AppConfig;
import cn.edu.hstc.app.Constant;
import cn.edu.hstc.bean.Inform;
import cn.edu.hstc.bean.News;
import cn.edu.hstc.bean.NewsEnum;

/**
 * @Description 新闻工具类
 * @author act262
 * @version 1.0
 * @since 2014-4-24 下午10:40:11
 * 
 */
public class NewsUtils {

	/**
	 * 获取首页的新闻快递列表新闻
	 * 
	 * @param document
	 *            首页的文档对象
	 * @return 首页的新闻快递内容
	 * @throws IOException
	 */
	public static List<News> getIndexNews(Document indexDocument) {
		List<News> newsList = new ArrayList<News>();

		// 新闻快递li的元素
		Elements newsLiElements;

		// 获取到新闻快递的选择器表达式
		String newsLiRegex = "div.wap div.main div.main-m div.main-mm div.borde ul li";

		// 从doc中选择器选择元素
		newsLiElements = indexDocument.select(newsLiRegex);

		News news = null;
		Element urlElement;

		// 循环取出每一个li里面的news
		for (Element liElement : newsLiElements) {
			urlElement = (Element) liElement.childNode(0).childNode(1);

			// System.out.println("绝对路径  " + urlElement.attr("abs:href"));
			// System.out.println("title " + urlElement.text());
			// System.out.println("time " + liElement.child(1).text());

			news = new News();
			news.setUrl(urlElement.attr("abs:href"));
			news.setTitle(urlElement.text());
			news.setPublishTime(liElement.child(1).text());

			newsList.add(news);
			news = null;
		}
		return newsList;
	}

	/**
	 * 根据新闻的类型获得新闻列表,
	 * 
	 * @param type
	 *            新闻类型
	 * @return 如果返回的长度不为0,则说明有内容;如果长度为0,则没有数据
	 */
	public static List<News> getNewsByType(NewsEnum type) {
		List<News> list = new ArrayList<News>();
		Document document = null;
		try {
			document = DocumentUtils.getWebDocument(type.getUrl(), AppConfig.CONNECT_TIME_OUT);
		} catch (IOException e) {
			e.printStackTrace();
			// 出现异常则直接返回一个长度为0 的list
			return list;
		}

		// 匹配新闻中心内容的的选择器表达式
		String newsRegex = "table tbody tr td table tbody tr td.a26 ul li";
		// 获取到的新闻列表元素
		Elements liElements = document.select(newsRegex);

		News news = null;
		Element urlElement;
		for (Element element : liElements) {
			urlElement = element.getElementsByTag("a").first();
			news = new News(type);
			news.setTitle(urlElement.text());
			news.setUrl(urlElement.attr("abs:href"));
			news.setPublishTime(element.getElementsByTag("span").first().text());

			list.add(news);
			urlElement = null;
		}
		return list;
	}

	/**
	 * 根据新闻类型获取内容,指定获取那一页的新闻
	 * 
	 * @param type
	 *            新闻类型
	 * @param index
	 *            指定页数,起始位置 为1,
	 * @return 如果返回的长度不为0,则说明有内容;如果长度为0,则没有数据
	 */
	public static List<News> getNewsByIndexType(NewsEnum type, int index) {
		List<News> list = new ArrayList<News>();
		String url = type.getUrl();
		if (index > 1) {
			url = url.substring(0, url.length() - 6) + "_" + index + ".shtml";
		}

		Document document = null;
		try {
			document = DocumentUtils.getWebDocument(url, AppConfig.CONNECT_TIME_OUT);
		} catch (IOException e) {
			e.printStackTrace();
			// 出现异常则直接返回一个长度为0 的list
			return list;
		}

		// 匹配新闻中心内容的的选择器表达式
		String newsRegex = "table tbody tr td table tbody tr td.a26 ul li";
		// 获取到的新闻列表元素
		Elements liElements = document.select(newsRegex);

		News news = null;
		Element urlElement;
		for (Element element : liElements) {
			urlElement = element.getElementsByTag("a").first();
			news = new News(type);
			news.setTitle(urlElement.text());
			news.setUrl(urlElement.attr("abs:href"));
			news.setPublishTime(element.getElementsByTag("span").first().text());

			list.add(news);
			urlElement = null;
		}
		return list;
	}

}
